In software development, test environments are created by computer scientists to mimic an existing software environment. Examples of existing software environments include online marketplaces that provide a number of services such as item descriptions, inventory management, payment services, shipping services, conflict resolution services, and the like. If one of these services fails or is updated, the test environment may be used to mimic the service to identify problems or determine how the update will affect the service or other services.
“Production environment” is used to refer to the website or machine farm made available to the company's customer base. Typically, there are a large number of physical machines (or virtual machines running on one or more physical machines) in the production environment. The quality assurance (QA) environment is where a QA team tests the software before releasing it to the production environment. The build environment is where the build team builds the software that is ultimately tested by the QA team and released to the production environment. The Continuous Integration (CI) environment is where the build team builds and tests code during its development. The QA, Build, and CI environments typically contain a significantly smaller number of computers than the production environment.
One of the common problems is to create a testing environment that represents a scaled down version of what is in the production environment to enable developers to debug a problem in their software and for QA teams to test the software. However, these environments, while functionally close to the production environment, are often inconsistent in small ways, allowing problems to slip through testing and into the production environment. Since the testing environments are often managed by different teams, OS versions, the software stack, and other software tools are often different on test environments than the production environment. These differences can mask problems in test environments that are not discovered until the software is implemented in the production environment.
Often, these environments represent additional cost in terms of physical hardware and the people needed to create and manage them. As there are typically few of these test environments, there is a high degree of contention for their use. It is often the case that developers cannot get the test environment when they need it. Moreover, the testing environments require significant human intervention to manage the lifecycle. Therefore, teams who fund the construction of such environments do not share them with other teams. These environments become underutilized and very costly as a result and are often created over capacity. The net result of not having the test environments is that the software is not as stable as it should be, failures occur on the company website, and customers are either unhappy or leave and go to a competitor's website.